import { baiduCloud } from './env'
// import CryptoJS from 'crypto-js'
// import AES from 'crypto-js/aes'
// import SHA256 from 'crypto-js/sha256'
// let Base64 = require('js-base64').Base64
import { obtainUploadCryptoString } from './api'
/**
 * 时间蹉转自定义格式时间
 */
export const dateRegExp = (time, strText) => {
  // console.log('................', time)
  let date = new Date(time)
  // 匹配strText中是否有(y+)(至少一个y)的文本
  // ? 0或1个  + 至少一个 *至少0个
  if (/(y+)/.test(strText)) {
    // RegExp.$1是RegExp的一个属性,指的是与正则表达式匹配的第一个 子匹配(以括号为标志)字符串
    // substr(a) 从第a位开始截取 === substring(a)   substring(a,b)截取[a,b)间
    // replace(pattern,replacement) 把字符串中pattern替换成replacement 返回替换后的字符串
    // console.log(typeof (date.getFullYear())) number
    // console.log(typeof (date.getFullYear() + '')) string
    strText = strText.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  let dataType = {
    'M+': date.getMonth() + 1,
    'd+': date.getDate(),
    'h+': date.getHours(),
    'm+': date.getMinutes(),
    's+': date.getSeconds()
  }
  for (let typeKey in dataType) {
    // console.log(`/(${typeKey})/`)
    if (new RegExp(`(${typeKey})`).test(strText)) {
      let typeValue = dataType[typeKey] + ''
      // length从零开始算起的
      // console.log(RegExp.$1 + '****') MM
      // console.log(RegExp.$1.length + '***') 2
      // 判断模板的格式，若一个M就typeValue 两个MM就padLeftZero(typeValue)
      strText = strText.replace(RegExp.$1, (RegExp.$1.length === 1 ? typeValue : padLeftZero(typeValue)))
    }
  }
  return strText
}
/**
 * 数字前加 0
 */
export const padLeftZero = (str) => {
  // console.log(str + '....') 7
  // console.log(str.length + '...') 1
  // 若str=7 从第一位算起substr(1)  007 ==>07
  // 若str=17 从第二位算起substr(2)  0017 ==>17
  return ('00' + str).substr(str.length)
}
/**
 * 时间蹉转评论时间
 */
export const commentRegExp = (timespan) => {
  let dateTime = new Date(timespan);
  // console.log(dateTime)
  let year = dateTime.getFullYear();
  let month = dateTime.getMonth() + 1;
  let day = dateTime.getDate();
  let hour = dateTime.getHours();
  let minute = dateTime.getMinutes();
  let second = dateTime.getSeconds();
  // let now = new Date();
  // let now_new = Date.parse(now.toDateString());  //typescript转换写法

  let now = new Date();
  let now_new = new Date().getTime();
  // console.log(now, now_new)
  let milliseconds = 0;
  let timeSpanStr;

  milliseconds = now_new - timespan;

  if (milliseconds <= 1000 * 60 * 1) {
    timeSpanStr = '刚刚';
  }
  else if (1000 * 60 * 1 < milliseconds && milliseconds <= 1000 * 60 * 60) {
    timeSpanStr = Math.round((milliseconds / (1000 * 60))) + '分钟前';
  }
  else if (1000 * 60 * 60 * 1 < milliseconds && milliseconds <= 1000 * 60 * 60 * 24) {
    timeSpanStr = Math.round(milliseconds / (1000 * 60 * 60)) + '小时前';
  }
  else if (1000 * 60 * 60 * 24 < milliseconds && milliseconds <= 1000 * 60 * 60 * 24 * 15) {
    timeSpanStr = Math.round(milliseconds / (1000 * 60 * 60 * 24)) + '天前';
  }
  else if (milliseconds > 1000 * 60 * 60 * 24 * 15 && year == now.getFullYear()) {
    timeSpanStr = month + '-' + day + ' ' + hour + ':' + minute;
  } else {
    timeSpanStr = year + '-' + month + '-' + day + ' ' + hour + ':' + minute;
  }
  return timeSpanStr;
}
/**
 * 获取当前路由地址
 */
export const obtainCurrentPage = () => {
  return new Promise((resolve) => {
    // 获取加载的页面 （getCurrentPages ==> 微信提供函数）
    let pages = getCurrentPages()
    // 获取当前页面的对象
    let currentPage = pages[pages.length - 1]
    // 当前页面url
    let url = currentPage.route
    resolve(url)
  })
}
/**
 * 上传文件(图片/视频)到百度云   file -- 文件对象  path -- 存放百度云的路径
 */
export const uploadMultimedia = (file, path, message ,fileKey) => {
  return new Promise(async (resolve, reject) => {
    console.log(fileKey,'..........fileKey')
    let key = fileKey || '';
    if (!key) {
      // 生成6位随机数
      let chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
      let res = ''
      for (let i = 0; i < 12; i++) {
        let id = Math.ceil(Math.random() * 61)
        res += chars[id]
      }
      key = res +'_'+new Date().getTime()+ '.' + file.split(/\./g).pop() // 保存到bos时的key，您可更改，默认以文件名作为key
    }

    // 百度云通过Post方式上传Object，要求必须存在Policy
    // let commonPolicy='{"conditions":[{"bucket":"'+ baiduCloud.bucketBos +'"},{"key":"report/image/$"}]}'
    let commonPolicy = '{"conditions":[{"bucket":"' + baiduCloud.bucketBos + '"},{"key":"' + path + '$"}]}'

    // 获取到的加密字节
    wx.showLoading({
      title: message ? message : "上传中..."
    });
    let CryptoString = await obtainUploadCryptoString(commonPolicy, key)
    console.log(CryptoString, '加密字节')
    if (CryptoString.status === 200) {
      wx.uploadFile({
        url: baiduCloud.urlBos,
        filePath: file,
        name: 'file', // 注意：这个name一定不要更改，一定不要更改，一定不要更改
        formData: {
          accessKey: baiduCloud.akBos,
          policy: CryptoString.data.base64,
          signature: CryptoString.data.signature,
          key: path + key // 注意：这个key必须与policy中的key保持一致，否则会报错
          // 'Content-Type':'image/png', // 可以不指定，BOS会自动判断
        },
        success: function (res) {
          // var data = res.data
          wx.hideLoading();
          if (res.statusCode === 200) {
            resolve(baiduCloud.urlBos + '/' + path + key)
            // console.log(res, path + key, 'uploadFile success')
          }

        },
        fail: function (res) {
          wx.hideLoading();

          // console.log(res, 'uploadFile error')
        }
      })
    } else {
      wx.hideLoading();
    }
  })
}

// 随机码key
export const uploadMultimediaKey = (file) => {
  return new Promise(async (resolve, reject) => {
    console.log(file, '...............文件')
    // 生成6位随机数
    let chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    let res = ''
    for (let i = 0; i < 6; i++) {
      let id = Math.ceil(Math.random() * 61)
      res += chars[id]
    }
    console.log(file, '...............文件')
    let key = res +'_'+new Date().getTime()+ '.' + file.split(/\./g).pop() // 保存到bos时的key，您可更改，默认以文件名作为key
    resolve({
      key: key.slice(0, key.lastIndexOf('.')),
      fileKey: key
    })
  })
}

/**
 * 本地储存
 *  name -- 储存的对象
 *  text -- 欲储存的文本
 *  count -- 储存的最大个数
 */
export const localStorage = (name, text, count) => {
  // console.log(name, text, count)
  // 判断该 存储对象是否存在
  let storageInfo = wx.getStorageSync(name)
  if (storageInfo) {
    // console.log(storageInfo, '...storageInfo')
    // 判断 欲储存的文本 是否存在 储存对象里面
    let storageIndex = storageInfo.indexOf(text)
    // console.log(storageIndex, '....storageIndex')
    if (storageIndex > -1) {
      // console.log('存在')
      // 存在 删除该元素  再插入到数组第一位
      let storageArray = storageInfo
      storageArray.splice(storageIndex, 1)
      // console.log(storageArray, '....删除该元素')
      storageArray.unshift(text)
      // console.log(storageArray, '....再插入到数组第一位')
      wx.setStorageSync(name, storageArray)
    } else {
      // console.log('不存在')
      // 不存在 直接插入到 数组第一位
      let storageArray = storageInfo
      storageArray.unshift(text)
      // console.log(storageArray, '....直接插入到 数组第一位')
      wx.setStorageSync(name, storageArray)
    }

    // 限制 存储的个数  若到达 存储的最大个数 则需 delete 最后一个
    if (JSON.stringify(storageInfo) !== '[]') {
      if (storageInfo.length > count) {
        // 则需 delete 最后一个
        // console.log(storageInfo.length, 'storageInfo.length')
        let storageArray = storageInfo
        storageArray.pop()
        // console.log(storageArray, '....则需 delete 最后一个')
        wx.setStorageSync(name, storageArray)
      }
    }

  } else {
    let storageArray = []
    storageArray.push(text)
    wx.setStorageSync(name, storageArray)
  }
}